import java.util.Stack;

/**
 *Thread que controla a thread da interface grafica
 * @author matheus
 */
public class ThreadGUI extends Thread {
	
	private Stack<Integer> jogadas;
	private GUIJogoDaVelha gui;
	
	public ThreadGUI(Stack<Integer> jogadas, Jogador j1, Jogador j2){
		this.jogadas = jogadas;
		gui = new GUIJogoDaVelha(jogadas, j1, j2); 
	}
	
	public GUIJogoDaVelha getGui() {
		return gui;
	}
	
	private void produz(){
		synchronized (jogadas) {
			try{
				//Fica esperando a interface grafica colocar valores na pilha, durante sua vez de atuar
				if(jogadas.peek() == 1 && jogadas.size() == 1){
					while(jogadas.size() < 3){
						jogadas.wait();		//Espera marcar
				//		System.out.println("Voltando para threadGUI");
					}	
					jogadas.notify(); //Quando ja tiverem argumentos suficientes na pilha, notifica quem esperea
				}
				else
					jogadas.notify(); //Acordada indevidamente, notifica
			}catch (Exception e) {}
		}

	}
	

	//Decide qual evento da interface grafica deve ser chamado
	public void marcaBotaoGUI(int y, int x){
		switch(y){
		case 1: switch (x){
				case 1: getGui().umXumActionPerformed(null);
						break;
				case 2: getGui().umXdoisActionPerformed(null);
						break;
				case 3: getGui().umXtresActionPerformed(null);
						break;
		
				}	
				break;
		case 2:switch (x){
			   case 1: getGui().doisXumActionPerformed(null);
			   break;
			   case 2: getGui().doisXdoisActionPerformed(null);
			   break;
			   case 3: getGui().doisXtresActionPerformed(null);
			   break;	
		}	
		break;
		
		case 3: switch (x){
				case 1: getGui().tresXumActionPerformed(null);
				break;
				case 2: getGui().tresXdoisActionPerformed(null);
				break;
				case 3: getGui().tresXtresActionPerformed(null);
				break;

		}	
		break;

		}
		
	}
	
	
	@Override
	public void run(){
		gui.setVisible(true); //Mostra a interface
		while(true){
			produz(); //Fica tentando produzir
		}

	}
	
	
	
	
    
}
